package exo4;

import java.util.Arrays;
import java.util.List;

public class BiblioJ {

	public static void main(String[] args) {
		// Code recupere de BiblioJ de Clement Bernard.
		Abonne abonnes[] = { new Abonne("Pierre", "Paris"),
				new Abonne("Martin", "La Defense"),
				new Abonne("Arthur", "Paris"),
				new Abonne("Alexandre", "Courbevoie"),
				new Abonne("Damien", "Nanterre") };

		// Idem, puis adapte a la correction.
		Ouvrage ouvrages[] = {
				new Ouvrage("Java pour les nuls", Media.PAPIER, 2010),
				new Ouvrage("Da Vinci Code", Media.PAPIER, 2004),
				new Ouvrage("L'avare", Media.DVD, 2000),
				new Ouvrage("Claude Gueux", Media.CD, 2009),
				new Ouvrage("Le Horlat", Media.CD, 2009),
				new Ouvrage("Le langage C", Media.CLE_USB, 2006),
				new Ouvrage("Les Miserables", Media.PAPIER, 1999),
				new Ouvrage("Les 3 mousquetaires", Media.DVD, 2011),
				new Ouvrage("Voyage au centre de la Terre", Media.PAPIER, 2001),
				new Ouvrage("Fairy Tail", Media.PAPIER, 2002) };
		
		Bibliotheque biblio = new Bibliotheque("Bibliotheque de Nanterre",
				Arrays.asList(ouvrages), Arrays.asList(abonnes));
		System.out.println("====================================== SCENARIOS D'EMPRUNTS, DE RESERVATION ET DE RESTITUTION ============================================\n");
		System.out.println("Emprunt par " + abonnes[0].getNom() + " de l'ouvrage :\n" + ouvrages[7] + " ==> " + (biblio.emprunter(ouvrages[7], abonnes[0]) ? "OK" : "Impossible"));
		System.out.println("\nEmprunt par " + abonnes[0].getNom() + " de l'ouvrage :\n" + ouvrages[2] + " ==> " + (biblio.emprunter(ouvrages[2], abonnes[0]) ? "OK" : "Impossible"));
		System.out.println("\nRéservation par " + abonnes[1].getNom() + " de l'ouvrage :\n" + ouvrages[0] + " ==> " + (biblio.reserver(ouvrages[0], abonnes[1]) ? "OK" : "Impossible"));
		System.out.println("\nEmprunt par " + abonnes[2].getNom() + " de l'ouvrage :\n" + ouvrages[3] + " ==> " + (biblio.emprunter(ouvrages[3], abonnes[2]) ? "OK" : "Impossible"));
		System.out.println("\nEmprunt par " + abonnes[2].getNom() + " de l'ouvrage :\n" + ouvrages[0] + " ==> " + (biblio.emprunter(ouvrages[0], abonnes[2]) ? "OK" : "Impossible"));	
		System.out.println("\nRestitution de l'ouvrage :\n" + ouvrages[7] + " ==> " + (biblio.restituer(ouvrages[7]) ? "OK" : "Impossible"));
		System.out.println("\nEmprunt par " + abonnes[3].getNom() + " de l'ouvrage :\n" + ouvrages[2] + " ==> " + (biblio.emprunter(ouvrages[2], abonnes[3]) ? "OK" : "Impossible"));
		System.out.println("\nRestitution de l'ouvrage :\n" + ouvrages[3] + " ==> " + (biblio.restituer(ouvrages[3]) ? "OK" : "Impossible"));
		System.out.println("\nEmprunt par " + abonnes[1].getNom() + " de l'ouvrage :\n" + ouvrages[0] + " ==> " + (biblio.emprunter(ouvrages[0], abonnes[1]) ? "OK" : "Impossible"));
		
		System.out.println("\n====================================== TOUS LES OUVRAGES DISPONIBLES ===================================================================\n");
		if (biblio.ouvragesDisponibles().isEmpty())
			System.out.println("Aucun ouvrage disponible.");
		else
			System.out.println(biblio.ouvragesDisponibles().toString());
		
		System.out.println("\n====================================== TOUS LES OUVRAGES RESERVES ======================================================================\n");
		if (biblio.ouvragesReserves().isEmpty())
			System.out.println("Aucun ouvrage réservé.");
		else
			System.out.println(biblio.ouvragesReserves().toString());
		
		System.out.println("\n====================================== TOUS LES OUVRAGES EMPRUNTES =====================================================================\n");
		if (biblio.ouvragesEmpruntes().isEmpty())
			System.out.println("Aucun ouvrage emprunté.");
		else
			System.out.println(biblio.ouvragesEmpruntes().toString());
		
		System.out.println("\n====================================== NOMBRE D'OUVRAGES PAR TYPE, DISPONIBLES, RESERVES OU EMPRUNTES ==================================\n");
		List<Integer[]> nbOuvragesParTypeDispoEmprunteReserve = biblio.nbOuvragesParTypeDispoEmprunteReserve();
		int  i = 0;
		String indentation = "    ";
		System.out.println("\t" + indentation + "Disponibles\t" + indentation +"Empruntes\t"+  indentation + "Reserves\n");
		for (Integer[] tab : nbOuvragesParTypeDispoEmprunteReserve) {
			System.out.print(Media.values()[i].toString());
			for (Integer value : tab){
				System.out.print("\t\t" + value);
			}
			i++;
			System.out.println();
		}
		
		System.out.println("\n====================================== ABONNES AYANT EFFECTUE UNE RESERVATION OU UN EMPRUNT =============================================\n");
		List<Abonne> resaOuEmprunts = biblio.abonnesAyantReserve();
		resaOuEmprunts.addAll(biblio.abonnesAyantEmprunte());
		if (resaOuEmprunts.isEmpty())
			System.out.println("Aucun abonné ayant reservé ou emprunté.");
		else
			System.out.println(resaOuEmprunts.toString());
		
		System.out.println("\n====================================== ABONNES N'AYANT NI RESERVE NI EMPRUNTE D'OUVRAGE ================================================\n");
		List<Abonne> niResaNiEmprunt = biblio.abonneSansResaSansEmprunt();
		if(niResaNiEmprunt.isEmpty())
			System.out.println("Aucun abonné dans ces cas.");
		else
			System.out.println(niResaNiEmprunt.toString());
		
		System.out.println("\n====================================== TOUS LES ABONNES DE LA BIBLIOTHEQUE =============================================================\n");
		System.out.println(biblio.getAbonnes().toString());
	}
}
